Completed
Push — master ( 2051aa...1fc68d )
by Johan
01:12
created

electedRenderProperties   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 13

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 13
rs 9.4285
1
/* global HTMLImageElement */
2
/* global HTMLCanvasElement */
3
/* global SVGElement */
4
5
import getOptionsFromElement from "./getOptionsFromElement.js";
6
7
// Takes an element and returns an object with information about how
8
// it should be rendered
9
// This could also return an array with these objects
10
// {
11
//   element: The element that the renderer should draw on
12
//   renderer: The name of the renderer
13
//   afterRender (optional): If something has to done after the renderer
14
//     completed, calls afterRender (function)
15
//   options (optional): Options that can be defined in the element
16
// }
17
18
function getRenderProperties(element){
19
	// If the element is a string, query select call again
20
	if(typeof element === "string"){
21
		return querySelectedRenderProperties(element);
22
	}
23
	// If element is array. Recursivly call with every object in the array
24
	else if(Array.isArray(element)){
25
		var returnArray = [];
26
		for(let i = 0; i < element.length; i++){
27
			returnArray.push(getRenderProperties(element[i]));
28
		}
29
		return returnArray;
30
	}
31
	// If element, render on canvas and set the uri as src
32
	else if(typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLImageElement){
33
		return newCanvasRenderProperties(element);
34
	}
35
	// If SVG
36
	else if(typeof SVGElement !== 'undefined' && element instanceof SVGElement){
37
		return {
38
			element: element,
39
			options: getOptionsFromElement(element),
40
			renderer: "svg"
41
		};
42
	}
43
	// If canvas (in browser)
44
	else if(typeof HTMLCanvasElement !== 'undefined' && element instanceof HTMLCanvasElement){
45
		return {
46
			element: element,
47
			options: getOptionsFromElement(element),
48
			renderer: "canvas"
49
		};
50
	}
51
	// If canvas (in node)
52
	else if(element.getContext){
53
		return {
54
			element: element,
55
			renderer: "canvas"
56
		};
57
	}
58
	else{
59
		throw new Error("Not supported type to render on.");
60
	}
61
}
62
63
64
function querySelectedRenderProperties(string){
65
	var selector = document.querySelectorAll(string);
66
	if(selector.length === 0){
67
		throw new Error("No element found");
68
	}
69
	else{
70
		let returnArray = [];
71
		for(let i = 0; i < selector.length; i++){
72
			returnArray.push(getRenderProperties(selector[i]));
73
		}
74
		return returnArray;
75
	}
76
}
77
78
79
function newCanvasRenderProperties(imgElement){
80
	var canvas = document.createElement('canvas');
81
	return {
82
		element: canvas,
83
		options: getOptionsFromElement(imgElement),
84
		renderer: "canvas",
85
		afterRender: function(){
86
			imgElement.setAttribute("src", canvas.toDataURL());
87
		}
88
	};
89
}
90
91
export default getRenderProperties;
92